package com.bawei.lookfor2204a.view.fragment.guanchang

import android.content.Intent
import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.GridLayoutManager
import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation
import com.ayvytr.adapter.smart
import com.bawei.lookfor2204a.R
import com.bawei.lookfor2204a.base.BaseFragment
import com.bawei.lookfor2204a.databinding.FragmentGuangChangBinding
import com.bawei.lookfor2204a.model.FindLiveListBean
import com.bawei.lookfor2204a.view.activity.watch.WatchActivity
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
import com.google.android.material.tabs.TabLayout
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener

/**
 * 广场页面
 */
class GuangChangFragment : BaseFragment<GuangChangViewModel, FragmentGuangChangBinding>(R.layout.fragment_guang_chang) {

    // 适配器
    val liveAdapter = smart(
        mutableListOf<FindLiveListBean.Result>(),
        R.layout.item_guang_chang,
        {item, position ->
            // 封面
            findViewById<ImageView>(R.id.iv_cover).load(item.liveCoverUrl) {
                placeholder(R.mipmap.ic_launcher)   // 占位图
                error(R.mipmap.ic_launcher)     // 错误他
                transformations(RoundedCornersTransformation(15f))  // 圆角
               // transformations(CircleCropTransformation())
            }
            // 昵称
            findViewById<TextView>(R.id.tv_nickname).text = item.nickName
            // 标题
            findViewById<TextView>(R.id.tv_title).text = item.liveTitle
            // 直播状态
            val tvLiveStatus = findViewById<TextView>(R.id.tv_live_status)
            if (item.liveStatus == 1) {
                tvLiveStatus.text = "直播中"
            } else {
                tvLiveStatus.text = "录播"
            }
        }
    ) {}.click { item, position ->
        // 网格条目点击，跳转到观看页面，如果是直播观看直播，如果是录播观看录播
        startActivity(Intent(activity, WatchActivity::class.java).apply {
            putExtra("liveId", item.liveId)     // 传递liveId到观看页面
            putExtra("liveStatus", item.liveStatus) // 传递直播状态到观看页面
            putExtra("liveTitle", item.liveTitle)   // 传递直播标题到观看页面
        })
    }

    override fun initData() {
        // 更新直播网格数据
        viewModel.findLiveListBeanSuccess.observe(this, {
            // 更新数据
            liveAdapter.update(it.result, true)
        })

        // 更新轮播图数据
        viewModel.bannerSuccess.observe(this, {
            if (binding.xbanner.realCount == 0) {
                // 设置轮播图数据源
                binding.xbanner.setData(it.result, null)
                // 加载轮播图图片
                binding.xbanner.setmAdapter { banner, view, position ->
                    (view as ImageView).load(it.result[position].liveCoverUrl)
                }
            }
        })
    }

    var liveType: Int = 100 // 直播类型
    var page: Int = 1   // 页码
    var size: Int = 5   // 一页展示多少条数据

    override fun initView() {
        // 直播类目显示
        binding.tab.addTab(binding.tab.newTab().setText("全部"))
        binding.tab.addTab(binding.tab.newTab().setText("校园"))
        binding.tab.addTab(binding.tab.newTab().setText("美食"))
        binding.tab.addTab(binding.tab.newTab().setText("健身"))
        binding.tab.addTab(binding.tab.newTab().setText("手游"))

        // 直播类型与直播网格列表联动
        binding.tab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab?) {
                // tab选中：直播类目选中
                when(tab?.position) {
                    0 -> liveType = 100
                    1 -> liveType = 101
                    2 -> liveType = 102
                    3 -> liveType = 103
                    4 -> liveType = 104
                }
                liveAdapter.clear()     // 清空数据集合，切换类后不能展示上一个类目的数据所以要清空
                page = 1    // 页码设置为1，切换类目后需要从第1页开始请求数据，所以页码要设置为1
                viewModel.findLiveList(liveType, page, size)
            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
            }

            override fun onTabReselected(tab: TabLayout.Tab?) {
            }
        })

        // 调用ViewModel请求数据
        binding.rec.layoutManager = GridLayoutManager(activity, 2)
        binding.rec.adapter = liveAdapter
        viewModel.findLiveList(liveType, page, size)

        // 下来刷新上拉加载
        binding.smartRefreshLayout.setOnRefreshLoadMoreListener(object :OnRefreshLoadMoreListener {
            override fun onRefresh(refreshLayout: RefreshLayout) {
                // 刷新
                liveAdapter.clear()     // 清空数据
                page = 1     // 把页码设置为1
                viewModel.findLiveList(liveType, page, size)    // 请求第一页数据
                refreshLayout.finishRefresh()   // 关闭刷新动画
            }

            override fun onLoadMore(refreshLayout: RefreshLayout) {
                // 加载更多
                page ++     // 页码增加1页
                viewModel.findLiveList(liveType, page, size)    // 请求下一页数据
                refreshLayout.finishLoadMore()  // 关闭加载更多动画
            }

        })

        // 轮播图
        viewModel.banner(100, 1, 3)
    }

    override fun getViewModel() = GuangChangViewModel::class.java
}